package com.zenithmind.coding.pojo.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 编程问题VO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "编程问题VO")
public class ProblemVO {

    /**
     * 问题ID
     */
    @Schema(description = "问题ID")
    private String id;

    /**
     * 问题标题
     */
    @Schema(description = "问题标题")
    private String title;

    /**
     * 问题描述
     */
    @Schema(description = "问题描述")
    private String description;

    /**
     * 输入说明
     */
    @Schema(description = "输入说明")
    private String inputDescription;

    /**
     * 输出说明
     */
    @Schema(description = "输出说明")
    private String outputDescription;

    /**
     * 示例输入
     */
    @Schema(description = "示例输入")
    private String sampleInput;

    /**
     * 示例输出
     */
    @Schema(description = "示例输出")
    private String sampleOutput;

    /**
     * 提示信息
     */
    @Schema(description = "提示信息")
    private String hint;

    /**
     * 问题来源
     */
    @Schema(description = "问题来源")
    private String source;

    /**
     * 问题分类ID
     */
    @Schema(description = "问题分类ID")
    private String categoryId;

    /**
     * 问题分类名称
     */
    @Schema(description = "问题分类名称")
    private String categoryName;

    /**
     * 问题标签列表
     */
    @Schema(description = "问题标签列表")
    private List<String> tags;

    /**
     * 难度等级（1-简单，2-中等，3-困难，4-专家）
     */
    @Schema(description = "难度等级（1-简单，2-中等，3-困难，4-专家）")
    private Integer difficulty;

    /**
     * 难度名称
     */
    @Schema(description = "难度名称")
    private String difficultyName;

    /**
     * 问题类型（1-算法，2-数据结构，3-数学，4-字符串，5-动态规划，6-图论）
     */
    @Schema(description = "问题类型（1-算法，2-数据结构，3-数学，4-字符串，5-动态规划，6-图论）")
    private Integer type;

    /**
     * 问题类型名称
     */
    @Schema(description = "问题类型名称")
    private String typeName;

    /**
     * 问题状态（0-草稿，1-已发布，2-已下架，3-审核中）
     */
    @Schema(description = "问题状态（0-草稿，1-已发布，2-已下架，3-审核中）")
    private Integer status;

    /**
     * 状态名称
     */
    @Schema(description = "状态名称")
    private String statusName;

    /**
     * 时间限制（毫秒）
     */
    @Schema(description = "时间限制（毫秒）")
    private Integer timeLimit;

    /**
     * 内存限制（KB）
     */
    @Schema(description = "内存限制（KB）")
    private Integer memoryLimit;

    /**
     * 支持的编程语言列表
     */
    @Schema(description = "支持的编程语言列表")
    private List<String> supportedLanguages;

    /**
     * 是否特殊评判（0-否，1-是）
     */
    @Schema(description = "是否特殊评判（0-否，1-是）")
    private Integer isSpecialJudge;

    /**
     * 提交次数
     */
    @Schema(description = "提交次数")
    private Long submitCount;

    /**
     * 通过次数
     */
    @Schema(description = "通过次数")
    private Long acceptCount;

    /**
     * 通过率
     */
    @Schema(description = "通过率")
    private Double acceptRate;

    /**
     * 平均用时（毫秒）
     */
    @Schema(description = "平均用时（毫秒）")
    private Integer avgTime;

    /**
     * 平均内存（KB）
     */
    @Schema(description = "平均内存（KB）")
    private Integer avgMemory;

    /**
     * 问题评分
     */
    @Schema(description = "问题评分")
    private Double rating;

    /**
     * 创建者ID
     */
    @Schema(description = "创建者ID")
    private String creatorId;

    /**
     * 创建者名称
     */
    @Schema(description = "创建者名称")
    private String creatorName;

    /**
     * 是否公开（0-私有，1-公开）
     */
    @Schema(description = "是否公开（0-私有，1-公开）")
    private Integer isPublic;

    /**
     * 是否推荐（0-否，1-是）
     */
    @Schema(description = "是否推荐（0-否，1-是）")
    private Integer isRecommend;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 用户解题状态（0-未尝试，1-尝试中，2-已通过）
     */
    @Schema(description = "用户解题状态（0-未尝试，1-尝试中，2-已通过）")
    private Integer userStatus;

    /**
     * 用户最佳成绩
     */
    @Schema(description = "用户最佳成绩")
    private Integer userBestScore;

    /**
     * 用户最佳用时（毫秒）
     */
    @Schema(description = "用户最佳用时（毫秒）")
    private Integer userBestTime;

    /**
     * 用户提交次数
     */
    @Schema(description = "用户提交次数")
    private Integer userSubmitCount;

    /**
     * 是否收藏
     */
    @Schema(description = "是否收藏")
    private Boolean isFavorite;

    /**
     * 相关问题列表
     */
    @Schema(description = "相关问题列表")
    private List<RelatedProblem> relatedProblems;

    /**
     * 相关问题
     */
    @Data
    @Schema(description = "相关问题")
    public static class RelatedProblem {
        
        /**
         * 问题ID
         */
        @Schema(description = "问题ID")
        private String id;

        /**
         * 问题标题
         */
        @Schema(description = "问题标题")
        private String title;

        /**
         * 难度等级
         */
        @Schema(description = "难度等级")
        private Integer difficulty;

        /**
         * 通过率
         */
        @Schema(description = "通过率")
        private Double acceptRate;
    }
}
